/**
 * 格式化日期
 * @param {Date|string|number} date - 日期对象、日期字符串或时间戳
 * @param {string} format - 格式化模式，默认为 'YYYY-MM-DD HH:mm:ss'
 * @returns {string} - 格式化后的日期字符串
 */
export function formatDate(date, format = 'YYYY-MM-DD HH:mm:ss') {
  if (!date) return ''
  
  // 如果是时间戳或日期字符串，转换为Date对象
  if (!(date instanceof Date)) {
    date = new Date(date)
  }
  
  // 如果日期无效，返回空字符串
  if (isNaN(date.getTime())) {
    return ''
  }
  
  const year = date.getFullYear()
  const month = date.getMonth() + 1
  const day = date.getDate()
  const hours = date.getHours()
  const minutes = date.getMinutes()
  const seconds = date.getSeconds()
  
  // 补零函数
  const padZero = (num) => (num < 10 ? `0${num}` : num)
  
  return format
    .replace('YYYY', year)
    .replace('MM', padZero(month))
    .replace('DD', padZero(day))
    .replace('HH', padZero(hours))
    .replace('mm', padZero(minutes))
    .replace('ss', padZero(seconds))
}

/**
 * 格式化文件大小
 * @param {number} size - 文件大小（字节）
 * @param {number} decimals - 小数位数，默认为2
 * @returns {string} - 格式化后的文件大小
 */
export function formatFileSize(size, decimals = 2) {
  if (!size) return '0 B'
  
  const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB']
  const k = 1024
  const dm = decimals < 0 ? 0 : decimals
  
  const i = Math.floor(Math.log(size) / Math.log(k))
  
  return parseFloat((size / Math.pow(k, i)).toFixed(dm)) + ' ' + units[i]
}

/**
 * 格式化数字（添加千位分隔符）
 * @param {number} num - 数字
 * @returns {string} - 格式化后的数字
 */
export function formatNumber(num) {
  if (num === undefined || num === null) return ''
  return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}